ResNeSt:Split-Attention Networks

这篇论文,讲道理我个人不是很喜欢,因为实验感觉也不是很充分,理论上感觉创新性也没那么高,只是提供了一个强有力的baseline,连作者本人也说大家对这篇文章的关注度过高了。不过,既然能引起大家广泛关注,还是有吸引人的地方的,那么对这篇论文进行介绍。

创新点

  1. 提出了一个feature map groups之间的attention机制,即Split-Attention block。通过像ResNet那样堆叠这些Split-Attention blocks,可以得到一个新的ResNet变体——ResNeSt。该模型保留了ResNet的整体结构,能够被应用到下游任务,且没有引入额外的计算量。
  2. ResNeSt模型比其他ResNet变体表现更好。如ResNeSt-50在图像分类任务上比最好的ResNet变体性能提高了1%。这种分类性能上的提升也带动了下游任务精度的提升。

创新点来源

虽然图像分类技术方面已经取得了巨大的进步,但是延伸出来的其他应用如目标检测、图像分割仍然使用ResNet及其变体作为backbone,因为这些结构简单且模块化。

  • 使用NAS搜索出的模型,虽然分类性能更强,但是并没有对训练性能、推理性能以及内存占用进行优化,限制了将这些模型应用到下游任务上。
  • ResNet模型只是为图像分类任务设计的,可能并不适合不同的下游任务。因为其有限的感受野并且缺少通道间的交互。因此在实际应用时,需要修改ResNet以适配特定任务。

然而这些更改通常只适用于特定的任务,那么就有一个问题:能够创建一个具有通用改进的backbone,从而同时提高各种下游任务的性能。Cross channel information被证明在下游任务很重要,那么创建一个有cross-channel information的backbone是值得期待的。

Split-Attention Networks

Split-Attention block是一个计算单元,主要包含feature-map group和split attention操作。图1(右)给出了split-attention block的总体框图。

image-20200511193928118

feature-map group. 正如ResNeXt blocks那样,feature能够被划分为几组,feature-map groups的数量由一个cardinality hyperparameter $K$给出,将产生的feature-map groups称为cardinal groups。然后作者引入了一个新的radix hyperparameter $R$将每个cardinal group进一步划分为$R$个splits,所以得到的feature groups总数为$G=KR$。对每一个独立group都进行一个变换$\cal F_i$,每组的中间量就可以用$U_i = {\cal F}_i (X),i \in {1,2,\cdots G}$表示。

Split Attention in Cardinal Groups. 首先,每一个cardinal group的融合特征可以通过将不同splits之间对应元素相加得到,如第$k$个cardinal group的融合特征用公式表示为$\hat U^k = \sum_{j=R(k-1)+1}^{RK} U_j$(对应于图2中第二行的加号符号),其中$U_j \in {\mathbb R}^{H \times W \times C/K}$(见图1右Split Attention模块上面,每一个Split的输出维度);$\hat U^k \in {\mathbb R}^{H \times W \times C/K},k\in 1,2,\cdots K$;$H,W,C$是block的输出特征图。接着,通过全局平均池化操作获得每个通道的统计信息,作为全局上下文信息$s^k \in {\mathbb R}^{C/K}$(对应于图2中第3行的Global pooling),其第$c$个元素(标量)通过下面式子计算得到:

image-20200511201930903

这些全局上下文信息用于融合同一cardinal group中的所有splits(乘法操作对应于图2中第7行的乘号操作和加法操作对应于第8行的加号操作)。对于第$k$个cardinal group的最终特征图,其第$c$个通道就是将不同split的第$c$个通道按照特定权重加权求和,具体计算方式如下:

image-20200511202102954

其中,$k$表示第$k$个cardinal group,$i$表示第$i$个split,$c$表示第$c$个通道。$U_{R(k-1)+i}$表示第$k$个cardinal group的第$i$个split,维度为${\mathbb R}^{H \times W \times C/K}$。$a_i^k(c)$表示第$k$个cardinal group,第$i$个划分中第$c$个channel的权重,为一个标量,可以由下面式子计算得到(对应于图2第6行中的$r-$Softmax操作):

image-20200511202345248

基于全局上下文信息$s^k$,映射函数$\cal G_i^c$决定了每个split中的第$c$个通道对最终第$k$个cardinal group产生的特征图的第$c$个通道特征的贡献值。如果splits数目$R=1$,则使用sigmoid函数完成归一化;若$R>1$,则使用softmax函数完成归一化。

image-20200511210935468

ResNeSt Block. 沿着channel维度将$K$个cardinal group的特征进行拼接:$V=Concat\{V^1,V^2, \cdots V^K\}$(对应于图1右最下面的Concatenate操作)。正如在标准残差blocks那样,若输入和输出特征图大小相同,Split-Attention block在产生输出$Y$时也采用了一个跳转连接:$Y=V+X$;若blocks有步长,则在产生$Y$时先对$X$采用一个合适的变换$\cal T$:$Y=V+{\cal T}(X)$,例如$\cal T$可以是带有步长的卷积或者带有池化的卷积。

Instantiation, Acceleration, and Computational Costs. 图1右为Split-Attention block的一个实例,其中上面介绍的${\cal F}_i$由一个$1 \times 1$和$3 \times 3$卷积组成。$\cal G$由两层全连接加ReLU激活函数组成。Split-Attention block的参数总数和FLOPs和有相同cardinal和channels数的标准残差模块粗略相等。

感觉上面这个操作还是挺复杂的,公式符号很多,这里总结一下:

  1. 首先,将输入特征图划分为$K$个cardinal group,然后将每一个cardinal group划分为$R$个split,这样就将输入特征图实际划分为了$KR$组。每一个split的输入维度为${\mathbb R}^{H \times W \times C/K/R}$,然后经过一个$1\times1$和$3 \times 3$卷积,每个split的输出维度为${\mathbb R}^{H \times W \times C/K}$。
  2. 将第$k$个cardinal group内所有split的输出按元素相加起来,得到融合后的特征$\hat U^k \in {\mathbb R}^{H \times W \times C/K},k\in 1,2,\cdots K$。
  3. 将融合后的特征$\hat U^k$经过一个全局平均池化层得到全局上下文信息$s^k \in {\mathbb R}^{C/K}$。
  4. 将全局上下文信息$s^k$经过映射函数${\cal G}_i^c$得到第$k$个cardinal group内第$i$ split第$c$个通道的权重。
  5. 将第$k$个cardinal group内所有split的权重按通道进行归一化。然后使用归一化的权值将所有split按照通道进行加权求和,即可得到最终第$k$个cardinal group经过Split Attention后的特征图。
  6. 将$k$个cardinal group经过Split Attention后的特征图进行拼接,并加上残差结构就完成了Split-Attention block。

Relation to Existing Attention Methods. 在SE-Net中,使用了一个全局上下文信息预测通道之间的权重,但是这是建立在整个block上面的;在SK-Net中,使用了。TODO

Network and Training

对于网络部分,主要有以下改进:

  1. 对于dense prediction tasks如目标检测或分割,保留空间信息特别重要,因此通常使用带步长的$3 \times 3$去卷积去代替$1 \times 1$的卷积。卷积层需要使用补零操作来处理特征图边界,这在转移到其他dense prediction tasks时通常是次优的。我们不使用带步长的卷积进行下采样,而是使用3×3的平均池化层。
  2. 将第一个$7 \times 7$的卷积替换为三个$3 \times 3$的卷积层,和原始的设计有相同的计算量和相同的感受野。
  3. A 2 × 2 average pooling layer is added to the shortcut connection prior to the 1 × 1 convolutional layer for the transitioning blocks with stride of two.

对于训练部分,主要用各种trick的叠加,比如说标签平滑损失、数据自动增强技术、Mixup增强技术、输入图像Crop时更大、各种正则化手段等。这里不再赘述。

实验结果

Ablation Study

ResNeSt模型主要是基于ResNet-D模型的。Mixup训练策略将ResNet-D模型的准确率从78.31%提升到了79.15%,数据自动增强技术进一步提高0.26%。使用Split-Attention block组成一个ResNeSt-50-fast模型,精度进一步的提升到80.64%。对于ResNeSt-fast设置中,在$3 \times 3$卷积前使用一个有效的平均下采样方式避免在模型中引入额外的计算量。将该下采样操作移动到$3 \times 3$卷积层后面,ResNeSt-50取得了81.13%的精度。

Radix vs. Cardinality. 采用不同的Radix和Cardinality,就可以得到不同的ResNeSt变体。在每一个变体中,对网络的宽度进行合适的调整,保证其总体计算量和ResNet变体相似。结果在表2中给出,其中$\rm s$表示radix,$\rm x$表示cardinality,$\rm d$表示网络的宽度(0$\rm s$ 为ResNet-D中标准残差结构)。可以发现,将radix从0增加到4会不断提高top-1的准确性,同时也会增加延迟和内存使用量。虽然我们希望在radix/Cardinality更大的情况下进一步提高精度,但我们在后续实验中使用了2s1x64d设置的Split-Attention,以确保这些块可以扩展到更深层次的网络,并在速度、精度和内存使用之间进行良好的权衡。

image-20200511221128425

Comparing against the State-of-the-Art

ResNet Variants. 将本文所提方法和ResNet变体进行比较,如表3所示,在相近参数量和FLOPs下,本文模型效果更好。ResNeSt-50模型在ImageNet上的top-1取得了80.64%的精度,这是第一个使用50层网络性能超过80%的ResNet变体。

image-20200511220906788

Other CNN Models. 对于更深的模型,作者加大了crop size。具体而言,ResNeSt-200使用大小为$256 \times 256$的crop size,ResNeSt-269使用$320 \times 320$的crop size。结果在表4中给出,除了参数量之外,我们还对比了推理时间。我们发现,尽管广泛使用的深度可分离卷积在参数量上具有优势,但它并没有优化推理速度。与通过神经结构搜索找到的模型相比,所提出的ResNeSt具有更好的准确性和推理时间。

image-20200511234812531

上面EfficientNet准确率应该是来自于原论文。

Transfer Learning Results

目标检测

为了进行比较,我们只将普通ResNet backbone替换为ResNeST,使用同时的超参数和detection heads。详细结果见表5,与使用标准ResNet的baseline相比,我们的backbone能够将FAST-RCNNs和CascadeRCNNs的平均精度提高约3%。结果表明,我们的backbone具有很好的泛化能力,可以很容易地移植到下游任务中去。值得注意的是,我们的ResNeSt-50在FAST-RCNN和CascadeRCNN检测模型上都优于ResNet101,使用的参数要少得多。

image-20200511235853118

Instance Segmentation

我们以ResNeST-50和ResNeST-101为backbone,对Mask-RCNN和Cascade-Mask-RCNN模型进行了评估。
所有模型都使用了FPN和synchronized batch normalization。对于数据增强,输入图像的短边被随机缩放到(640,672,704,736,768,800)中的一个。为了与其他方法进行公平的比较,保持训练超参数不变。使用标准ResNet对作为backbone,将这些baseline按照前面说的设置进行重新训练。

如表6所示,本文所提的backbone实现了更好的性能。对于Mask-RCNN,ResNeSt-50在box/mask的精度方面比baseline提高了2.85%/2.09%,ResNeSt101表现得更好,分别提高了4.03%/3.14%。对于Cascade-Mask-RCNN,更换为ResNeSt50或ResNeSt101产生的增益分别为3.13%/2.36%或3.51%/3.04%。这表明,如果一个模型包含更多的Split-Attention modules,那么它会更好。在检测结果中观察到,ResNeSt50的MAP超过了标准的ResNet101主干的结果,这表明使用我们提出的模块的小模型的容量更高。

image-20200512000458103

Semantic Segmentation

对于Cityscapes数据集,结果在表7右给出,本文的ResNeST backbone将DeepLabV3模型实现的mIoU提高了约1%,同时整体模型复杂性相似。值得注意的是,用ResNeST-50作为backbone的DeepLabV3模型的性能比使用更大的ResNet-101作为backbone的DeepLabV3的性能更好。

对于ADE20K数据集,表7左展示了pixAcc和mIoU,通过采用我们的ResNeST backbone,DeepLabV3的性能大大提高。与之前的结果类似,使用我们的ResNeST-50作为backbone的DeepLabv3模型的性能已经超过了使用更深的ResNet-101作为backbone的DeepLabv3。采用ResNeST-101作为backbone的DeepLabV3实现了82.07%的PixAcc和46.91%的mIoU,据我们所知,这是目前为止,在ADE20K上最好的单一模型。

image-20200512000427899

总结

本文的目的很明确,就是提供一个特别适用于下游任务的强有力的backbone,作者从通道间的信息融合入手,将一个cardinal group进一步细分为多组splits。然后在一个cardinal group内将多组splits按照通道进行加权求和,也就是本文所说的Split-Attention机制。最后验证了在图像分类任务和各种迁移学习任务上的性能,证明了这个backbone的强大。

参考

《ResNeSt: Split-Attention Networks》笔记
Similar to the attention of SKNet.

------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道